package com.ruoyi.proposal.mapper;

import com.ruoyi.proposal.domain.Proposal;
import com.ruoyi.proposal.dto.ProposalQueryDTO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 提案Mapper接口
 * 用于数据库操作
 */
@Mapper
public interface ProposalMapper {
    /**
     * 插入提案记录
     * @param proposal 提案对象
     * @return 插入记录数
     */
    int insert(Proposal proposal);


    /**
     * 根据ID更新提案记录
     * @param proposal 提案对象
     * @return 更新记录数
     */
    int updateById(Proposal proposal);

    /**
     * 根据ID删除提案记录
     * @param id 提案ID
     * @return 删除记录数
     */
    int deleteById(Long id);

    /**
     * 根据ID查询提案记录
     * @param id 提案ID
     * @return 提案对象
     */
    Proposal selectById(Long id);

    /**
     * 查询所有提案记录
     * @return 提案列表
     */
    List<Proposal> selectAll();

    /**
     * 根据条件查询提案记录
     * @param queryDTO 查询条件
     * @return 提案列表
     */
    List<Proposal> selectByCondition(ProposalQueryDTO queryDTO);

    /**
     * 根据条件查询提案记录总数
     * @param queryDTO 查询条件
     * @return 记录总数
     */
    int countByCondition(ProposalQueryDTO queryDTO);

    /**
     * 查询财务相关提案记录
     * @param queryDTO 查询条件
     * @return 提案列表
     */
    List<Proposal> selectFinanceProposals(ProposalQueryDTO queryDTO);

    /**
     * 查询财务相关提案记录总数
     * @param queryDTO 查询条件
     * @return 记录总数
     */
    int countFinanceProposals(ProposalQueryDTO queryDTO);

    /**
     * 查询待打分提案记录
     * @param queryDTO 查询条件
     * @return 提案列表
     */
    List<Proposal> selectScoreProposals(ProposalQueryDTO queryDTO);

    /**
     * 查询待打分提案记录总数
     * @param queryDTO 查询条件
     * @return 记录总数
     */
    int countScoreProposals(ProposalQueryDTO queryDTO);
}